﻿using Creature_Battle.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Creature_Battle.BR;

namespace Creature_Battle
{
    public class GUI
    {
        static Creature_Factory cr = new Creature_Factory();
        static Random rand = new Random();
        public void Read_Command(string command, Player pl)
        {
            switch (command)
            {

                case "criar":
                    Console.WriteLine("Escreva o nome da criatura : ");
                    Console.Write(">");
                    pl.creature.Add(cr.Create_Creature(Console.ReadLine()));
                    pl.atual = pl.creature[0];
                    break;                
                
                case "escolher":
                    int cont = 0;
                    foreach (Creature item in pl.creature)
                    {
                       cont++;
                       Console.WriteLine(cont);
                       Show_Creature_Details(item);
                    }
                    Console.Write(">");
                    string op = Console.ReadLine();
                    pl.atual = pl.creature[Convert.ToInt32(op) - 1];

                    break;

                case "detalhes":
                    foreach (Creature item in pl.creature)
	                    {
                        Show_Creature_Details(item);
	                    }
                    break;
                case "batalha":
                    Creature battleCr = cr.Create_Creature("Criatura de Batalha");
                    do_battle_demo(pl,battleCr);
                    break;

                default:
                    break;
            }
        }


        public void Set_Name(Player p)
        {
            Console.WriteLine("Qual seu nome?");
            Console.Write(">");
            p.Name = Console.ReadLine();

        }

        public void Show_Creature_Details(Creature cr)
        {
            Console.WriteLine("Nome : " + cr.Nome);
            Console.WriteLine("Vida : " + cr.CurrentHP);
            Console.WriteLine("Ataque : " + cr.CurrentAttackPower);
            Console.WriteLine("Level : " + cr.Level);

        }

        public void do_battle_demo(Player pl, Creature cre)
        {


            while (!(pl.atual.CurrentHP <= 0 || cre.CurrentHP <= 0))
            {
                Console.WriteLine("Detalhes : ");
                Show_Creature_Details(pl.atual);
                Show_Creature_Details(cre);

                Console.WriteLine("O que deseja fazer?");
                Console.WriteLine("1 - Soco \n 2 - Laser \n 3 - Bomba Nuclear \n 4 - Cura");
                Console.Write(">");
                string acao = Console.ReadLine();

                

                switch (acao)
                {
                    case "1":
                        Console.WriteLine("Você deu um soco, tirou " + pl.atual.CurrentAttackPower);
                        cre.CurrentHP -= pl.atual.CurrentAttackPower;
                        break;
                    case "2":
                        if (rand.Next(0, 101) > 50)
                        {
                            Console.WriteLine("Voce acertou o laser, e tirou " + pl.atual.CurrentAttackPower * 2);
                            cre.CurrentHP -= pl.atual.CurrentAttackPower * 2;
                        }
                        else
                            Console.WriteLine("Voce errou!");

                        break;
                    case "3":
                        Console.WriteLine("Você soltou uma bomba no meio da arena, tirou " + pl.atual.CurrentAttackPower * 3 + " de vocês dois!");
                        cre.CurrentHP -= pl.atual.CurrentAttackPower * 3;
                        pl.atual.CurrentHP -= pl.atual.CurrentAttackPower * 3;
                        break;
                    case "4":
                        Console.WriteLine("Você se curou 10!");
                        pl.atual.CurrentHP += 10;
                        break;

                    default:
                        break;
                }
                Console.WriteLine();
                Console.WriteLine("Vez de " + cre.Nome);

                acao = rand.Next(1,5).ToString();
                switch (acao)
                {
                    case "1":
                        Console.WriteLine(cre.Nome + " deu um soco, tirou " + cre.CurrentAttackPower);
                        pl.atual.CurrentHP -= cre.AttackPower;
                        break;
                    case "2":
                        if (rand.Next(0, 101) > 50)
                        {
                            Console.WriteLine(cre.Nome + " acertou o laser, e tirou " + cre.CurrentAttackPower * 2);
                            pl.atual.CurrentHP -= cre.CurrentAttackPower * 2;
                        }
                        else
                            Console.WriteLine(cre.Nome + " errou!");

                        break;
                    case "3":
                        Console.WriteLine(cre.Nome + " soltou uma bomba no meio da arena, tirou " + cre.CurrentAttackPower * 3 + " de vocês dois!");
                        cre.CurrentHP -= cre.CurrentAttackPower * 3;
                        pl.atual.CurrentHP -= cre.CurrentAttackPower * 3;
                        break;
                    case "4":
                        Console.WriteLine(cre.Nome + " se curou 10!");
                        cre.CurrentHP += 10;
                        break;

                    default:
                        break;
                }
            }
            if (cre.CurrentHP <= 0)
            {
                Console.WriteLine("Você ganhou!");
                pl.atual.Level++;
                pl.atual.AttackPower += 5;
                pl.atual.HP += 5;
            }
            else
            {
                Console.WriteLine("Você perdeu");
                if (pl.atual.Level > 1)
                {
                    pl.atual.Level--;
                    pl.atual.AttackPower -= 5;
                    pl.atual.HP -= 5;
                }
            }

            pl.atual.CurrentHP = pl.atual.HP;
            pl.atual.CurrentAttackPower = pl.atual.AttackPower;

        }
    }
}
